using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ConversionTools._ToGeodatabase
{
    /// <summary>
    /// <para>BIM File To Geodatabase</para>
    /// <para>Imports the contents of one or more BIM file workspaces into a single geodatabase feature dataset.</para>
    /// <para>将一个或多个 BIM 文件工作空间的内容导入到单个地理数据库要素数据集中。</para>
    /// </summary>    
    [DisplayName("BIM File To Geodatabase")]
    public class BIMFileToGeodatabase : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public BIMFileToGeodatabase()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_bim_file_workspace">
        /// <para>Input BIM File Workspace</para>
        /// <para>The BIM file or files that will be converted to geodatabase feature classes.</para>
        /// <para>将转换为地理数据库要素类的一个或多个 BIM 文件。</para>
        /// </param>
        /// <param name="_out_gdb_path">
        /// <para>Output Geodatabase</para>
        /// <para>The geodatabase where the output feature dataset will be created. This must be an existing geodatabase.</para>
        /// <para>将在其中创建输出要素数据集的地理数据库。这必须是现有地理数据库。</para>
        /// </param>
        /// <param name="_out_dataset_name">
        /// <para>Dataset</para>
        /// <para>The building dataset name.</para>
        /// <para>构建数据集名称。</para>
        /// </param>
        public BIMFileToGeodatabase(List<object> _in_bim_file_workspace, object _out_gdb_path, object _out_dataset_name)
        {
            this._in_bim_file_workspace = _in_bim_file_workspace;
            this._out_gdb_path = _out_gdb_path;
            this._out_dataset_name = _out_dataset_name;
        }
        public override string ToolboxName => "Conversion Tools";

        public override string ToolName => "BIM File To Geodatabase";

        public override string CallName => "conversion.BIMFileToGeodatabase";

        public override List<string> AcceptEnvironments => ["XYDomain", "XYResolution", "XYTolerance", "ZResolution", "ZTolerance", "extent", "geographicTransformations", "outputCoordinateSystem"];

        public override object[] ParameterInfo => [_in_bim_file_workspace, _out_gdb_path, _out_dataset_name, _spatial_reference, _identifier, _out_feature_dataset, _out_featureclass_dataset];

        /// <summary>
        /// <para>Input BIM File Workspace</para>
        /// <para>The BIM file or files that will be converted to geodatabase feature classes.</para>
        /// <para>将转换为地理数据库要素类的一个或多个 BIM 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input BIM File Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_bim_file_workspace { get; set; }


        /// <summary>
        /// <para>Output Geodatabase</para>
        /// <para>The geodatabase where the output feature dataset will be created. This must be an existing geodatabase.</para>
        /// <para>将在其中创建输出要素数据集的地理数据库。这必须是现有地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_gdb_path { get; set; }


        /// <summary>
        /// <para>Dataset</para>
        /// <para>The building dataset name.</para>
        /// <para>构建数据集名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_dataset_name { get; set; }


        /// <summary>
        /// <para>Spatial Reference</para>
        /// <para><xdoc>
        ///   <para>The spatial reference of the output feature dataset.</para>
        ///   <para>To control other aspects of the spatial reference, such as the x,y-, z-, and m- domains, resolutions, and tolerances, set the appropriate geoprocessing environments.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出要素数据集的空间参考。</para>
        ///   <para>要控制空间参考的其他方面，例如 x、y、z 和 m 属性域、分辨率和容差，请设置相应的地理处理环境。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spatial_reference { get; set; } = null;


        /// <summary>
        /// <para>Identifier</para>
        /// <para>A unique building identifier that will be added to all output feature classes. The identifier allows you to add unique names to each building to be used at a later time.</para>
        /// <para>将添加到所有输出要素类的唯一建筑物标识符。该标识符允许您为每个建筑物添加唯一的名称，以便以后使用。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Identifier")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _identifier { get; set; } = null;


        /// <summary>
        /// <para>Output Feature Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_dataset { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _out_featureclass_dataset { get; set; }


        public BIMFileToGeodatabase SetEnv(object XYDomain = null, object XYResolution = null, object XYTolerance = null, object ZResolution = null, object ZTolerance = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null)
        {
            base.SetEnv(XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, ZResolution: ZResolution, ZTolerance: ZTolerance, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem);
            return this;
        }

    }

}